﻿// C++11.cpp: 定义应用程序的入口点。
//

#include <iostream>
#include <stdarg.h>
using namespace std;

/*变长参数测试
note : 参数不允许使用指向引用的指针，std::string&
*/
void testva_list(int count, ...)
{
	cout << "testva_list()" << endl;
	va_list args;
	va_start(args, count); 

		int i = va_arg(args, int);
		cout << i << endl;
		 i = va_arg(args, int);
		cout << i << endl;
		i = va_arg(args, int);
		cout << i << endl;

	va_end(args);
}
/*系统定义的宏*/ 
void Macro_test()
{
	cout << __LINE__ << endl;
	cout << __FILE__ << endl;
	cout << __FUNCTION__ << endl;
	cout << __DATE__ << endl;
	cout << __TIME__ << endl;
	cout << __COUNTER__ << endl;
}
uint64_t getDoubleValue(char* ctx, string key)
{
	return 3365866997;
}
string getStringValue(char* ctx, string key)
{
	return "3365866997";
}
#define getDoubleFormJson(Type,key)\
	Type get##key(char* ctx)\
	{\
		return getDoubleValue(ctx,#key);\
	}
#define getStringFormJson(Type,key)\
	Type get##key(char* ctx)\
	{\
		return getStringValue(ctx,#key);\
	}

getDoubleFormJson(uint64_t, data);
getStringFormJson(string, uin);

int main()
{
	
	cout << "Hello CMake." << endl;
	testva_list(3, 1, 2, 3);
	cout << "end()" << endl;
	Macro_test();
	cout << getdata("") << endl;
	cout << getuin("") << endl;
	return 0;
}
